// GB2312 编码的文本
const text = "你好，世界";

// 将 GB2312 编码的文本转换为二进制数据
// const encoder = new TextEncoder("gb2312");
// const data = encoder.encode(text);

// 对二进制数据进行 Base64 编码
// const base64Data = btoa(String.fromCharCode(...data));
const base64Data = btoa(encodeURIComponent(text));

// 5L2g5aW977yM5LiW55WM
console.log('base64',base64Data);

// 将 Base64 编码转换为原文本
console.log('解码',atob(encodeURIComponent(base64Data)));
console.log(atob(encodeURIComponent("5L2g5aW977yM5LiW55WM")));

// let str = atob(base64Data)
// const encoder2 = new TextEncoder("utf-8");
// const data2 = encoder2.encode(text);
// console.log(data2);


const Base64 = {
    encode(str) {
        // 首先，我们使用 encodeURIComponent 来获得百分比编码的UTF-8，然后我们将百分比编码转换为原始字节，最后存储到btoa里面
        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
            function toSolidBytes(match, p1) {
                return String.fromCharCode(Number('0x' + p1));
            }));
    },
    decode(str) {
        // 过程：从字节流到百分比编码，再到原始字符串
        return decodeURIComponent(atob(str).split('').map(function (c) {
            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
        }).join(''));
    }
}
let encoded = Base64.encode("一颗不甘坠落的流星"); 	// "5LiA6aKX5LiN55SY5Z2g6JC955qE5rWB5pif"
console.log(encoded);
let decoded = Base64.decode(encoded); 	
console.log(decoded);
